/*
 * 版权所有 (C) 2015 知启蒙(ZHIQIM) 保留所有权利。[遇见知启蒙，邂逅框架梦，本文采用木兰宽松许可证第2版]
 * 
 * https://zhiqim.org/project/zhiqim_kit/zhiqim_git.htm
 *
 * ZhiqimGit is licensed under Mulan PSL v2.
 * You can use this software according to the terms and conditions of the Mulan PSL v2.
 * You may obtain a copy of Mulan PSL v2 at:
 *          http://license.coscl.org.cn/MulanPSL2
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PSL v2 for more details.
 */
package org.zhiqim.git.http;

import org.zhiqim.git.GitConstants;
import org.zhiqim.git.objer.objectid.ObjectId;
import org.zhiqim.git.refer.Ref;


/**
 * 接受命令模型对象
 *
 * @version v1.0.0 @author zouzhigang 2017-4-17 新建与整理
 */
public class ReceiveCommand implements GitConstants
{
    private final ObjectId oldId;
    private final ObjectId newId;
    private final String name;

    private Ref ref;
    private String message;
    private ReceiveCommandType type;
    private ReceiveCommandResult result;
    
    public ReceiveCommand(ObjectId oldId, ObjectId newId, String name)
    {
        this.oldId = oldId;
        this.newId = newId;
        this.name = name;

        this.type = ReceiveCommandType.UPDATE;
        if (ZEROID.equals(oldId))
            this.type = ReceiveCommandType.CREATE;
        if (ZEROID.equals(newId))
            this.type = ReceiveCommandType.DELETE;
        this.result = ReceiveCommandResult.NOT_ATTEMPTED;
    }

    public ObjectId getOldId()
    {
        return oldId;
    }

    public ObjectId getNewId()
    {
        return newId;
    }

    public String getRefName()
    {
        return name;
    }

    public ReceiveCommandType getType()
    {
        return type;
    }

    public Ref getRef()
    {
        return ref;
    }

    public ReceiveCommandResult getResult()
    {
        return result;
    }

    public String getMessage()
    {
        return message;
    }

    public void setResult(ReceiveCommandResult result)
    {
        setResult(result, null);
    }

    public void setResult(ReceiveCommandResult result, String message)
    {
        this.result = result;
        this.message = message;
    }

    void setRef(Ref ref)
    {
        this.ref = ref;
    }

    void setType(ReceiveCommandType type)
    {
        this.type = type;
    }

    @Override
    public String toString()
    {
        return type.name() + ": " + oldId.getName() + " " + newId.getName() + " " + name;
    }
}
